package br.com.cfccultura.admin.model.dao.mysql;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;

import br.com.cfccultura.admin.model.dao.IComputadorProvaDAO;
import br.com.cfccultura.admin.model.enums.Ativo;
import br.com.cfccultura.admin.model.enums.SimNao;
import br.com.cfccultura.admin.model.vo.ComputadorProva;

@Repository
public class ComputadorProvaDAO extends DAO implements IComputadorProvaDAO {

	@Override
	public List<ComputadorProva> consultar(ComputadorProva vo) {

		String sql = "SELECT cd_computador_prova, dc_computador_prova, id_disponivel, id_ativo FROM tb_computador_prova where ";
		Object[] params;
		if(vo.getCodigo() != null) {
			sql += "cd_computador_prova = ? ";
			params = new Object[]{vo.getCodigo()};
		} else {
			sql += "dc_computador_prova like ? ";
			String desc = "%";
			if(vo.getDescricao() != null && !vo.getDescricao().equals("")) {
				desc = vo.getDescricao() + "%";
			}
			params = new Object[]{desc};
		}
		sql += "and id_ativo = 1 order by dc_computador_prova";

		List<ComputadorProva> result = query(sql, params, new RowMapper<ComputadorProva>() {
			@Override
			public ComputadorProva mapRow(ResultSet rs, int arg1) throws SQLException {
				ComputadorProva vo = new ComputadorProva();
				vo.setCodigo(rs.getInt("cd_computador_prova"));
				vo.setDescricao(rs.getString("dc_computador_prova"));
				vo.setDisponivel(SimNao.setValue(rs.getInt("id_disponivel")));
				vo.setAtivo(Ativo.setValue(rs.getInt("id_ativo")));
				return vo;
			}
			
		});		
		
		return result;
	}
	
	@Override
	public void incluir(ComputadorProva vo) {
		String sql = "INSERT INTO tb_computador_prova(dc_computador_prova, id_disponivel) values(?,?)";
		update(sql, new Object[] {vo.getDescricao(), vo.getDisponivel().getValue()});
	}
	
	@Override
	public void alterar(ComputadorProva vo) {
		String sql = "UPDATE tb_computador_prova set dc_computador_prova = ?, id_disponivel = ? where cd_computador_prova = ?";
		update(sql, new Object[] {vo.getDescricao(), vo.getDisponivel().getValue(), vo.getCodigo()});
	}
	
	@Override
	public void excluir(Integer id) {
		try {
			String sql = "DELETE FROM tb_computador_prova where cd_computador_prova = ?";
			update(sql, new Object[] {id});
		} catch(DataIntegrityViolationException e) {
			String sql = "UPDATE tb_computador_prova set id_ativo = 0 where cd_computador_prova = ?";
			update(sql, new Object[] {id});
		}
	}

}
